// 第一题
// 总结JSON.stringfy()方法知识点


// 1 第二个参数--数组
// 决定序列化的具体属性
 let obj = {
    name: 'age',
    age: 18,
    like: {
        color: 'red'
    }
 }

//  console.log(JSON.stringify(obj, ['name', 'age']));

 // 第二个参数是函数,处理对应的序列化字段的逻辑
let students = [{name: 'xiaohong', score: 100}, {name: 'zhangsan', score: 60}, {name: 'lisi', score: 80}]

let res = JSON.stringify(students, (key, value) => {
    if (key === 'score') {
        if (value <= 60) {
            return 'B'
        } else if (value <= 80) {
            return 'A';
        } else if (value <= 100) {
            return 'S';
        } else {
            return 'E'
        }
    } else {
        return value;
    }
});
// console.log(res);

// 2、特殊类型的处理

let  obj2 = {
    name: 'zhoulaosi', // 可以序列化
    like: ['兰茜', '新年到新年酒店'],// 可以序列化
    year: 2022,// 可以序列化
    fn: function() {},// 忽略
    u: undefined,// 忽略
    n: null,// 序列化输出 null
    reg: new RegExp(),// 序列化输出 {}
    a: NaN,// 序列化输出 null
    b: Infinity,// 序列化输出 null
    c: -Infinity,// 序列化输出 null
    d: new Date()// 可以序列化
}

console.log(JSON.stringify(obj2))
// {"name":"zhoulaosi","like":["兰茜","新年到新年酒店"],"year":2022,"n":null,"reg":{},"a":null,"b":null,"c":null,"d":"2022-08-16T16:11:18.941Z"}

// 注意:因为特殊类型无法被序列化,所以在使用该方法进行深拷贝时候必须注意要排除这些类型的值


// 3、该方法无法序列户循环应用的值

let a = {
    name: 'a'
}

a.a = a;
console.log(JSON.stringify(a)); // 报错





